package com.link.serve.tcp.linkdata;

import io.netty.channel.ChannelHandlerContext;

import java.util.Objects;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;

/**
 * 单用户管理，性能优化版本
 */
public class SingleUserChannelManager {

    /**
     * 使用扁平化 Map 存储
     * CompositeKey 作为键，ChannelHandlerContext 作为值
     */
    private static final ConcurrentMap<Long, ChannelHandlerContext> channelMap = new ConcurrentHashMap<>();
    /**
     * 集群下各个tcp服务之间的长连接管理
     */

    /**
     * 添加一个 Channel
     * @param userId 用户ID
     * @param ctx ChannelHandlerContext
     */
    public static void addChannel(long userId, ChannelHandlerContext ctx) {
       if (!channelMap.containsKey(userId)) {
           channelMap.put(userId,ctx);
       }
    }
    /**
     * 判断用户是否在线
     *
     * @param userId 用户ID
     * @return boolean 用户是否在线
     */
    public static boolean isOnline(long userId) {
        return channelMap.containsKey(userId);
    }

    /**
     * 删除一个 Channel 必须要当前有channel的情况
     * @param userId 用户ID
     */
    public static void removeChannel(long userId) {
        if (channelMap.containsKey(userId)) {
            channelMap.remove(userId);
        }
    }
    /**
     * 清空所有用户的 Channel
     * 适用于服务停止或重启时的清理逻辑
     */
    public static void clearAll() {
        channelMap.clear();
    }
    /**
     * 获取一个 Channel
     *
     * @param userId 用户ID
     * @return ChannelHandlerContext
     */
    public static ChannelHandlerContext getChannel(long userId) {
        return channelMap.get(userId);
    }
    public static int getSize(){
        return channelMap.size();
    }

    public static ConcurrentMap<Long, ChannelHandlerContext> getChannelMap() {
        return channelMap;
    }
}
